﻿/*
 
隐式转换和显式转换
隐式转换：C# 默认的以安全方式进行的转换。本质是从小存储容量数据类型自动转换为大存储容量数据类型，从派生类转换为基类。 

 */
using System;

namespace TypeConvertion
{
    class Class1
    {

    }

    class Class2 : Class1 //类Class2是类Class1的子类
    {

    }

    class Program
    {
        static void Main(string[] args)
        {
            int inum = 100;
            long lnum = inum; // 进行了隐式转换，将 int 型（数据范围小）数据转换为了 long 型（数据范围大）的数据
            Class1 c1 = new Class2(); // 这里也是隐式转换，将一个新建的 Class2 实例转换为了其基类 Class1 类型的实例 C1

            /*
             
            显式转换：通过用户使用预定义的函数显式完成的，显式转换需要强制转换运算符。

            转换类型的范围大小和从属关系和隐式转换相反。显式转换可能会导致数据出错，或者转换失败，甚至无法编译成功。 

             */

            double dnum = 100.1;
            int ifromd = (int)dnum;//double类型显式转换转为int类型

            Class1 c11 = new Class1();
            Class2 c22 = c11 as Class2; //使用as进行显式转换
            Console.WriteLine(c22 is Class1);
            Console.WriteLine(c22 is Class2);

            string locstr = 123.ToString();

            //如果要将"locstr"转成整型数
            
            //方法一: 用 Convert 
            int i = Convert.ToInt32(locstr);
            
            //方法二: 用 Parse
            int ii = int.Parse(locstr);


            Console.ReadKey();
        }
    }
}